﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

namespace GoldenAgeHelper.db
{
    public interface IDBHelper
    {
        //#region 字段
        //private static SqlCommand sqlcmd;//sql命令对象。
        //public static SqlConnection sqlconn;//sql连接对象。
        //private static SqlDataAdapter sqladapter;//sql适配器。
        //private static SqlTransaction trans;//事务处理对象。
        //private static string connectionString;//表示连接字符串。
        //private static string server;//表示服务。
        //private static string database;//表示数据库。
        //private static string defaultconnectstring;
        //#endregion

        #region 属性
        /// <summary>
        /// 获取或者设置服务。
        /// </summary>
        string Server
        {
            get;
            set;
        }
        /// <summary>
        /// 设置或获取数据库。
        /// </summary>
        string Database
        {
            get;
            set;
        }
        string ConnectionString
        {
            get;
            set;
        }
        #endregion

        void ChangeDatabase(string database);

        void Connect();

        DbConnection GetConnection();

        /// <summary>
        /// 判断是否能够连接。
        /// </summary>
        /// <returns>返回错误信息，可以连的话是返回null.</returns>
        void canConnection();

        bool isOpen();

        /// <summary>
        /// 执行查询语句。
        /// </summary>
        /// <param name="sqlstring">sql字符串。</param>
        /// <returns>表结构</returns>
        DataSet ExecuteQuery(string sqlstring);

        /// <summary>
        /// 执行查询语句。
        /// </summary>
        /// <param name="sqlstring">sql字符串。</param>
        /// <param name="tableName">表名。</param>
        /// <returns>表结构</returns>
        DataSet ExecuteQuery(string sqlstring, string tableName);

        /// <summary>
        /// 执行带参数的查询语句。
        /// </summary>
        /// <param name="sqlstring">查询语句。</param>
        /// <param name="list">参数。</param>
        /// <returns>查询的内容。</returns>
        DataTable ExecuteQuery(string sqlstring, List<DbParameter> list);

        /// <summary>
        /// 执行存储过程，返回查询的结果。
        /// </summary>
        /// <param name="procName">存储过程的名称。</param>
        /// <param name="p">存储过程的参数。</param>
        /// <returns>查询的结果。</returns>
        DataTable ExecuteQuery(string procName, params DbParameter[] p);

        /// <summary>
        /// 执行sql语句，返回第一条第一列记录。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        /// <returns>返回第一行第一列的记录。</returns>
        object ExecuteScalar(string sqlstring);

        object ExecuteScalar(string sqlstring, List<DbParameter> list);

        /// <summary>
        /// 执行存储过程，返回第一条第一列的记录。
        /// </summary>
        /// <param name="procName">存储过程的名称。</param>
        /// <param name="p">存储过程的参数。</param>
        /// <returns>第一行第一列的记录。</returns>
        object ExecuteScalar(string procName, params DbParameter[] p);

        /// <summary>
        /// 执行sql语句，返回影响的行数。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        /// <returns>影响的行数。</returns>
        int ExecuteNonQuery(string sqlstring);

        /// <summary>
        /// 执行带参数的sql语句，返回影响行数。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        /// <param name="list">参数列表。</param>
        /// <returns>影响的行数。</returns>
        int ExecuteNonQuery(string sqlstring, List<DbParameter> list);

        /// <summary>
        /// 执行存储过程，返回影响的行数。
        /// </summary>
        /// <param name="procName">存储过程的名称。</param>
        /// <param name="p">存储过程的参数。</param>
        /// <returns>影响的行数。</returns>
        int ExecuteNonQuery(string procName, params DbParameter[] p);

        /// <summary>
        /// 执行sql语句，返回一行记录。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        /// <returns>一行记录。</returns>
        List<object> ExecuteReader(string sqlstring);

        /// <summary>
        /// 执行带参数的sql语句，返回一行记录。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        /// <param name="list">参数的集合。</param>
        /// <returns>一行记录。</returns>
        List<object> ExecuteReader(string sqlstring, List<DbParameter> list);

        /// <summary>
        /// 准备开始连接。
        /// </summary>
        /// <param name="sqlstring">sql语句。</param>
        void prepareCommand(string sqlstring, CommandType type);

        /// <summary>
        /// 提交事务操作。
        /// </summary>
        void Commit();

        /// <summary>
        /// 回滚事务操作。
        /// </summary>
        void RollBack();

        /// <summary>
        /// 开始事务处理。
        /// </summary>
        /// <returns>返回，是否是已经开始的事务。</returns>
        bool BeginTransaction();

        /// <summary>
        /// 关闭数据库连接。
        /// </summary>
        void Dispose();
    }
}
